// 购物车模块
const cart = {
  namespaced: true,
  
  state: {
    cartItems: [], // 购物车商品列表
    totalAmount: 0, // 购物车总金额
    totalQuantity: 0, // 购物车商品总数量
    isCartUpdated: false // 购物车是否已更新标志
  },

  getters: {
    // 获取购物车商品总数
    getCartItemCount: (state) => {
      return state.cartItems.reduce((total, item) => total + item.quantity, 0)
    },
    
    // 获取购物车总金额
    getCartTotalAmount: (state) => {
      return state.cartItems.reduce((total, item) => total + (item.price * item.quantity), 0)
    },
    
    // 检查商品是否在购物车中
    isProductInCart: (state) => (productId) => {
      return state.cartItems.some(item => item.id === productId)
    },
    
    // 获取购物车中特定商品的数量
    getProductQuantity: (state) => (productId) => {
      const item = state.cartItems.find(item => item.id === productId)
      return item ? item.quantity : 0
    },
    
    // 获取购物车中特定商品的数量（简化版）
    getItemQuantity: (state) => (productId) => {
      const item = state.cartItems.find(item => item.id === productId)
      return item ? item.quantity : 0
    },
    
    // 获取选中的商品
    getSelectedItems: (state) => {
      return state.cartItems.filter(item => item.selected)
    },
    
    // 获取选中商品的总金额
    getSelectedTotalAmount: (state) => {
      return state.cartItems
        .filter(item => item.selected)
        .reduce((total, item) => total + (item.price * item.quantity), 0)
    }
  },

  mutations: {
    // 设置购物车商品列表
    SET_CART_ITEMS(state, items) {
      state.cartItems = items
    },
    
    // 更新购物车总金额和总数量
    UPDATE_CART_TOTALS(state) {
      state.totalQuantity = state.cartItems.reduce((total, item) => total + item.quantity, 0)
      state.totalAmount = state.cartItems.reduce((total, item) => {
        return total + (item.selected ? (item.price * item.quantity) : 0)
      }, 0)
    },
    
    // 设置购物车更新标志
    SET_CART_UPDATED(state, isUpdated) {
      state.isCartUpdated = isUpdated
    },
    
    // 添加商品到购物车
    ADD_TO_CART(state, product) {
      const existingItem = state.cartItems.find(item => item.id === product.id)
      
      if (existingItem) {
        // 如果商品已存在，增加数量
        existingItem.quantity += product.quantity || 1
      } else {
        // 如果商品不存在，添加新商品
        state.cartItems.push({
          id: product.id,
          name: product.name,
          price: product.price,
          image: product.image || product.cover,
          quantity: product.quantity || 1,
          selected: true, // 默认选中
          specs: product.specs || {} // 商品规格信息
        })
      }
    },
    
    // 从购物车移除商品
    REMOVE_FROM_CART(state, productId) {
      const index = state.cartItems.findIndex(item => item.id === productId)
      if (index > -1) {
        state.cartItems.splice(index, 1)
      }
    },
    
    // 更新购物车中商品的数量
    UPDATE_PRODUCT_QUANTITY(state, { productId, quantity }) {
      const item = state.cartItems.find(item => item.id === productId)
      if (item) {
        // 确保数量至少为1
        item.quantity = Math.max(1, parseInt(quantity) || 1)
      }
    },
    
    // 切换商品选中状态
    TOGGLE_PRODUCT_SELECTION(state, productId) {
      const item = state.cartItems.find(item => item.id === productId)
      if (item) {
        item.selected = !item.selected
      }
    },
    
    // 全选/取消全选
    TOGGLE_SELECT_ALL(state, isSelected) {
      state.cartItems.forEach(item => {
        item.selected = isSelected
      })
    },
    
    // 删除选中的商品
    REMOVE_SELECTED_ITEMS(state) {
      state.cartItems = state.cartItems.filter(item => !item.selected)
    },
    
    // 清空购物车
    CLEAR_CART(state) {
      state.cartItems = []
    }
  },

  actions: {
    // 添加商品到购物车
    addToCart({ commit, state }, product) {
      commit('ADD_TO_CART', product)
      commit('UPDATE_CART_TOTALS')
      commit('SET_CART_UPDATED', true)
      
      // 持久化到本地存储
      uni.setStorageSync('cart_items', JSON.stringify(state.cartItems))
      
      // 显示添加成功提示
      uni.showToast({
        title: '已添加到购物车',
        icon: 'success',
        duration: 2000
      })
    },
    
    // 从购物车移除商品
    removeFromCart({ commit, state }, productId) {
      // 支持两种参数格式：productId 或 { id: productId }
      const id = typeof productId === 'object' ? productId.id : productId
      
      commit('REMOVE_FROM_CART', id)
      commit('UPDATE_CART_TOTALS')
      commit('SET_CART_UPDATED', true)
      
      // 持久化到本地存储
      uni.setStorageSync('cart_items', JSON.stringify(state.cartItems))
      
      uni.showToast({
        title: '已从购物车移除',
        icon: 'success',
        duration: 1500
      })
    },
    
    // 更新购物车中商品的数量
    updateProductQuantity({ commit, state }, { productId, quantity }) {
      commit('UPDATE_PRODUCT_QUANTITY', { productId, quantity })
      commit('UPDATE_CART_TOTALS')
      commit('SET_CART_UPDATED', true)
      
      // 持久化到本地存储
      uni.setStorageSync('cart_items', JSON.stringify(state.cartItems))
    },
    
    // 更新购物车中商品的数量（简化版）
    updateQuantity({ commit, state }, { id, quantity }) {
      commit('UPDATE_PRODUCT_QUANTITY', { productId: id, quantity })
      commit('UPDATE_CART_TOTALS')
      commit('SET_CART_UPDATED', true)
      
      // 持久化到本地存储
      uni.setStorageSync('cart_items', JSON.stringify(state.cartItems))
    },
    
    // 切换商品选中状态
    toggleProductSelection({ commit, state }, productId) {
      commit('TOGGLE_PRODUCT_SELECTION', productId)
      commit('UPDATE_CART_TOTALS')
      commit('SET_CART_UPDATED', true)
      
      // 持久化到本地存储
      uni.setStorageSync('cart_items', JSON.stringify(state.cartItems))
    },
    
    // 全选/取消全选
    toggleSelectAll({ commit, state }, isSelected) {
      commit('TOGGLE_SELECT_ALL', isSelected)
      commit('UPDATE_CART_TOTALS')
      commit('SET_CART_UPDATED', true)
      
      // 持久化到本地存储
      uni.setStorageSync('cart_items', JSON.stringify(state.cartItems))
    },
    
    // 删除选中的商品
    removeSelectedItems({ commit, state }) {
      commit('REMOVE_SELECTED_ITEMS')
      commit('UPDATE_CART_TOTALS')
      commit('SET_CART_UPDATED', true)
      
      // 持久化到本地存储
      uni.setStorageSync('cart_items', JSON.stringify(state.cartItems))
      
      uni.showToast({
        title: '已删除选中商品',
        icon: 'success',
        duration: 1500
      })
    },
    
    // 清空购物车
    clearCart({ commit, state }) {
      commit('CLEAR_CART')
      commit('UPDATE_CART_TOTALS')
      commit('SET_CART_UPDATED', true)
      
      // 持久化到本地存储
      uni.setStorageSync('cart_items', JSON.stringify(state.cartItems))
      
      uni.showToast({
        title: '购物车已清空',
        icon: 'success',
        duration: 1500
      })
    },
    
    // 重置购物车更新标志
    resetCartUpdateFlag({ commit }) {
      commit('SET_CART_UPDATED', false)
    },
    
    // 初始化购物车
    initCart({ commit, rootState }) {
      try {
        // 检查用户是否已登录
        if (!rootState.isLogin) {
          // 未登录则清空购物车
          commit('SET_CART_ITEMS', [])
          commit('UPDATE_CART_TOTALS')
          return
        }
        
        const savedCart = uni.getStorageSync('cart_items')
        if (savedCart) {
          const cartItems = JSON.parse(savedCart)
          commit('SET_CART_ITEMS', cartItems)
          commit('UPDATE_CART_TOTALS')
        }
      } catch (error) {
        console.error('加载购物车数据失败:', error)
      }
    }
  }
}

export default cart